
const app = getApp()

// 发送网络请求 //引入属性
import { baseURL } from './config.js'

let subscribers = [];
let postajaxtimes = 0

/**
 * 执行队列中的接口
 */
function onAccessTokenFetched() {
  subscribers.forEach((callback) => {
    console.log(callback)
    callback();
  })
  subscribers = [];
}

function addSubscriber(callback) {
  subscribers.push(callback)
}


/**
 * 导出默认方法 
 */
export default function request({ url, data = {}, method, header = false, callback = ''} = {}){

  //需要登录 先刷新token
  if(header){
    const time = wx.getStorageSync('time');
    const token = wx.getStorageSync('token');
    if(!token || !time){
      app.globalData.userInfo = ""

      wx.switchTab({
        url: '/pages/profile/index',
      })
      return
    }

    //如果当前时间超过了time  则说明token过期了 重新获取
    let now = new Date().getTime()
    if(now > time){
      refreshToken()
    }
  }

  postajaxtimes++
  /**
   * 接收两个参数
   */
  return new Promise((resolve, reject)=>{
    
    //显示请求提示框
    wx.showLoading({    
      title: '请求中',
    })

    //如果header为真，则表示该请求在header中要带上token, 如果为假， 则表示请求中可以不用token
    header = header ? {'Authorization':wx.getStorageSync('token'),'source':'wx'} : {'source':'wx'};
    wx.request({
      url: baseURL+url,
      method: method || 'get',
      data: data || {},
      header:header,
      fail(err){
        console.log(err,"---------------------------------")
        if(!err.errno || err.errno == 600001 || err.errno == 600002 || err.errno == 600003){
          return wx.redirectTo({
            url: '/pages/err/err',
          })
        }
        reject(err)
      },
      //接口调用结束的回调函数（调用成功、失败都会执行）object.success 回调函数
      complete(res){
        
        if (callback) return callback(res.data);
        let code = res.statusCode;
        
        if(code == 400){
          console.log('接口不存在')
        }
        else if(code == 200){
          resolve(res.data)
        }
        else if(code == 500){
          wx.showModal({ content: res.data.msg, showCancel: false });
        }
        postajaxtimes--
        if (postajaxtimes === 0) {
          wx.hideLoading()  //关闭请求提示框
        }
      }
    })
  })
}

function refreshToken(){
  return new Promise((resolve, reject) => {
   
    wx.login({
      success(res) {
        wx.request({
          url: baseURL + "/member/refreshToken",
          method:"get",
          data: {
            refreshToken: token
          },
          success(res) {
            let r = res.data;
            // 将所有存储到观察者数组中的请求重新执行。
            if (r.code == 0) {
              wx.setStorageSync("token", r.data.token);
              wx.setStorageSync("time", r.data.time);
              resolve(res);
            }
          }
        })
      },
      fail(err) {
        console.error('wx login fail', err);
        reject(err)
      }
    });
  })
}

